/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package BD;

import BE.Linealistaprecio;
import BE.Producto;
import BE.Tipocliente;
import java.sql.Array;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
/**
 *
 * @author dennis
 */
public class ProductoBD {

    private Session session;

    public ProductoBD() {

         this.session = null;//HibernateUtil.getSessionFactory().getCurrentSession();

    }

    public List<Integer> buscarCantidadesPedido(int idPedido) {
//

        List<Integer> lista = null;
        String consulta="";

        consulta="select int_cantidadsolicitada" +
                " from lineapedido " +
                " where srl_idpedido="+idPedido +
                " order by srl_idproducto";


        Transaction tx =null;
        try {
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            tx = session.beginTransaction();
            SQLQuery sqlquery=session.createSQLQuery(consulta);
            session.flush();
            lista = sqlquery.list();
            tx.rollback();
        } catch (Exception e) {
            e.printStackTrace();
            if(tx!=null)
            {
                tx.rollback();
            }
        }
        return lista;

    }

    public List<Double> buscarPreciosPedido(int idPedido) {
//

        List<Double> lista = null;
        String consulta="";

        consulta="select rl_preciounitario" +
                " from lineapedido " +
                " where srl_idpedido="+idPedido +
                " order by srl_idproducto";


        Transaction tx =null;
        try {
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            tx = session.beginTransaction();
            SQLQuery sqlquery=session.createSQLQuery(consulta);
            session.flush();
            lista = sqlquery.list();
            tx.rollback();
        } catch (Exception e) {
            e.printStackTrace();
            if(tx!=null)
            {
                tx.rollback();
            }
        }
        return lista;

    }

    public List<Producto> buscarListaProductoPedido(int idPedido) {
//

        List<Producto> lista = null;
        String consulta="";

        consulta=" select {producto.*} " +
                " from producto " +
                " where srl_idproducto in (select srl_idproducto from lineapedido where srl_idpedido="+idPedido+")" +
                " order by srl_idproducto";


        Transaction tx =null;
        try {
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            tx = session.beginTransaction();
            SQLQuery sqlquery=session.createSQLQuery(consulta);
            sqlquery.addEntity("producto",Producto.class);

            session.flush();
            lista = sqlquery.list();
            tx.rollback();
        } catch (Exception e) {
            e.printStackTrace();
            if(tx!=null)
            {
                tx.rollback();
            }
        }
        return lista;

    }

    public List<Producto> buscarListaProducto(Tipocliente objTipoClienteBE)
    {
        List<Producto> lista =null;
        Transaction tx =null;

        try {

            session = HibernateUtil.getSessionFactory().getCurrentSession();
            tx = session.beginTransaction();
            String hql = "From Producto " +
                "where srlIdproducto in " +
                       "(select producto.srlIdproducto from Linealistaprecio where id.srlIdlistaprecio=" +objTipoClienteBE.getListaprecio().getSrlIdlistaprecio() +")" +
                       " order by srlIdproducto";
            Query query = session.createQuery(hql);

//           String [] str=null;
//            Array arr=null;
//           Connection con= HibernateUtil.getSessionFactory().getCurrentSession().connection();
//           CallableStatement cs = con.prepareCall("{call hallarprodvalidos(57)}");
//           ResultSet rs = cs.executeQuery();
//           while (rs.next())
//           {
//            System.out.println (rs.getString(1));
//
//            rs.getString(1).replaceAll("\\", "");
//            str=rs.getString(1).split(",");
//
//            arr = rs.getArray(1);
//
//           }

            session.flush();
            lista = query.list();
            tx.rollback();

        } catch (Exception e) {
            e.printStackTrace();
            if(tx!=null)
            {
                tx.rollback();
            }
        }
        return lista;
    }

    public void buscarPrecioxLista(List<Producto> arrProducto,int strIdLista)
    {
        List<Linealistaprecio> lista =null;
        String consulta="";



        Transaction tx =null;

        try {
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            tx = session.beginTransaction();

           for (int i=0;i<arrProducto.size();i++)
            {
            consulta="Select {linealistaprecio.*} " +
                "From linealistaprecio " +
                "where srl_idlistaprecio= "+ strIdLista +" and srl_idproducto="+ arrProducto.get(i).getSrlIdproducto();

            SQLQuery sqlquery=session.createSQLQuery(consulta);
            sqlquery.addEntity("linealistaprecio",Linealistaprecio.class);

            session.flush();
            lista = sqlquery.list();

            arrProducto.get(i).setRlPreciocosto(lista.get(0).getRlPreciounitario());

            }
            tx.rollback();
        } catch (Exception e) {
            e.printStackTrace();
            if(tx!=null)
            {
                tx.rollback();
            }
        }

    }

    public void buscarStock(List<Producto> arrProducto,int intIdCliente)
    {

        List lista = null;
        String consulta="";



        Transaction tx =null;

        try {
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            tx = session.beginTransaction();

            consulta="Select a.srl_idalmacen " +
                "From almacen a, cliente b, ubigeo c " +
                "where b.srl_idpersona="+ intIdCliente +" and b.int_departamento=c.int_departamento and b.int_provincia=c.int_provincia " +
                "and b.int_distrito=c.int_distrito and c.srl_idzonaabastecimiento=a.srl_idzonaabastecimiento";

            SQLQuery sqlquery=session.createSQLQuery(consulta);

            session.flush();
            lista = sqlquery.list();

            int intIdAlmacen = Integer.parseInt(lista.get(0).toString());

            for (int i=0;i<arrProducto.size();i++)
            {
            consulta="Select int_stockdisponible " +
                "From productoxalmacen " +
                "where srl_idalmacen="+ intIdAlmacen +" and srl_idproducto="+ arrProducto.get(i).getSrlIdproducto();

            sqlquery=session.createSQLQuery(consulta);

            session.flush();
            lista = sqlquery.list();

                if ((lista!=null)&&(lista.size()>0))
                {
                arrProducto.get(i).setIntStockminimo(Integer.parseInt(lista.get(0).toString()));
                }
                else
                { arrProducto.remove(i);
                    i--;}
            }

            tx.rollback();
        } catch (Exception e) {
            e.printStackTrace();
            if(tx!=null)
            {
                tx.rollback();
            }
        }

    }
}
